package com.example.demorabbitmqlisten.rabbitmq;

import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.Mode;
import cn.hutool.crypto.Padding;
import cn.hutool.crypto.symmetric.SM4;
import cn.hutool.extra.spring.SpringUtil;

/**
 * 国密4工具类
 *
 * @author rockzhan 2021-04-11 2:05
 * @version 1.0
 */
public class Sm4Util {

    private static final SM4 SM_4;

    static{
        String key = SpringUtil.getProperty("mq.sm4Key");
        String iv = SpringUtil.getProperty("mq.sm4iv");
        SM_4 = new SM4(Mode.CBC, Padding.PKCS5Padding, StrUtil.bytes(key, CharsetUtil.CHARSET_UTF_8), StrUtil.bytes(iv, CharsetUtil.CHARSET_UTF_8));
    }

    /**
     * 对{@code str}进行国密4加密
     *
     * @param str 待加密字符串
     * @return 加密后字符串
     * @author rockzhan 2021-04-11 2:13
     */
    public static String encrypt(String str){
        return StrUtil.isBlank(str) ? str : SM_4.encryptHex(str, CharsetUtil.CHARSET_UTF_8);
    }

    /**
     * 对{@code str}进行国密4解密
     *
     * @param str 待解密字符串
     * @return 解密后字符串
     * @author rockzhan 2021-04-11 2:13
     */
    public static String decrypt(String str){
        return StrUtil.isBlank(str) ? str : SM_4.decryptStr(str, CharsetUtil.CHARSET_UTF_8);
    }
}
